From 80428e7745bc122c13ac4ea43c53e94c4120181f Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Tue, 20 Apr 2010 14:16:13 -0400 Subject: [PATCH] Restore layout in get_desired_size() after guessing a wrap width This fixes the label layout in cases where gtk_widget_size_request() is called on a label without a following size_allocate(), for instance when a button state changes. --- gtk/gtklabel.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index ff210feb92..5446d91fe2 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3350,11 +3350,10 @@ gtk_label_get_desired_size (GtkExtendedLayout *layout, * - minimum size should be MAX (width-chars, 0) * - natural size should be MIN (max-width-chars, strlen (label->text)) * - * - * */ - /* Refresh layout if needed */ + /* When calculating ->wrap sometimes we need to invent a size; Ideally we should be doing + * that stuff here instead of inside gtk_label_ensure_layout() */ if (label->wrap) gtk_label_clear_layout (label); gtk_label_ensure_layout (label, TRUE); @@ -3430,6 +3429,16 @@ gtk_label_get_desired_size (GtkExtendedLayout *layout, *natural_size = natural_rect.height + label->misc.ypad * 2; } } + + /* Restore real allocated size of layout; sometimes size-requests + * are randomly called without a following allocation; for this case + * we need to make sure we dont have a mucked up layout because we + * went and guessed the wrap-size. + */ + if (label->wrap) + gtk_label_clear_layout (label); + gtk_label_ensure_layout (label, FALSE); + } -- 2.30.2